<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" >

<title>iOS打包静态库SOP | 迷航</title>
<meta name="description" content="人可以迷失方向，但是不能停下脚步！">

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="shortcut icon" href="https://tingke.gitee.io/post/favicon.ico?v=1690805106645">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css">
<link rel="stylesheet" href="https://tingke.gitee.io/post/styles/main.css">



<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>

<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />



  </head>
  <body>
    <div id="app" class="main">

      <div class="sidebar" :class="{ 'full-height': menuVisible }">
  <div class="top-container" data-aos="fade-right">
    <div class="top-header-container">
      <a class="site-title-container" href="https://tingke.gitee.io/post">
        <img src="https://tingke.gitee.io/post/images/avatar.png?v=1690805106645" class="site-logo">
        <h1 class="site-title">迷航</h1>
      </a>
      <div class="menu-btn" @click="menuVisible = !menuVisible">
        <div class="line"></div>
      </div>
    </div>
    <div>
      
        
          <a href="/" class="site-nav">
            首页
          </a>
        
      
        
          <a href="/archives" class="site-nav">
            归档
          </a>
        
      
        
          <a href="/tags" class="site-nav">
            标签
          </a>
        
      
        
          <a href="/post/about" class="site-nav">
            关于
          </a>
        
      
    </div>
  </div>
  <div class="bottom-container" data-aos="flip-up" data-aos-offset="0">
    <div class="social-container">
      
        
      
        
      
        
      
        
      
        
      
    </div>
    <div class="site-description">
      人可以迷失方向，但是不能停下脚步！
    </div>
    <div class="site-footer">
      Powered by <a href="https://github.com/getgridea/gridea" target="_blank">Gridea</a> Copyright © 2019 | <a class="rss" href="https://tingke.gitee.io/post/atom.xml" target="_blank">RSS</a>
    </div>
  </div>
</div>


      <div class="main-container">
        <div class="content-container" data-aos="fade-up">
          <div class="post-detail">
            <h2 class="post-title">iOS打包静态库SOP</h2>
            <div class="post-date">2018-02-20</div>
            
            <div class="post-content">
              <p>今天，领导要求将App中网络请求的核心代码打包成静态库。故上网研究了一下静态库打包的相关知识，边看边试的打包成功了。现在在这里总结下：</p>
<!-- more --> 
<h2 id="库的基本知识">库的基本知识</h2>
<p><strong>1、 什么是库？</strong></p>
<p>所谓库就是程序代码的集合，是共享程序代码的一种方式。</p>
<p><strong>2、 库的分类</strong></p>
<p>根据程序代码的开源情况，库可以分为两类</p>
<ul>
<li>
<p>开源库</p>
<p>源代码是公开的，你可以看到具体实现。比如GitHub上比较出名的第三方框架AFNetworking、SDWebImage。</p>
</li>
<li>
<p>闭源库</p>
<p>不公开源代码，只公开调用的接口，看不到具体的实现，是一个编译后的二进制文件。这种常见于一些公司的SDK包，比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类：静态库和动态库。本篇重点要讲的便是其中的静态库。</p>
</li>
</ul>
<p><strong>3、静态库和动态库的存在形式和使用区别</strong></p>
<p>存在形式：</p>
<p>静态库<br>
以&quot;.a&quot;或者“.framework”为文件后缀名<br>
动态库<br>
以&quot;.dylib&quot;或者“.framework”为文件后缀名</p>
<p>使用区别：</p>
<p>静态库链接时会被完整的复制到可执行文件中，被多次使用就有多份拷贝。<br>
动态库链接时不复制，程序运行时由系统动态加载到内存，供程序调用。而且系统只加载一次，多个程序共用，节省内存。</p>
<h2 id="a文件静态库打包"><code>.a</code>文件静态库打包</h2>
<p><strong>步骤一、新建一个新工程或在老项目中新建一个新Target，选择<code>Cocoa Touch Static Library</code></strong><br>
<img src="http://outiw4np3.bkt.clouddn.com/7f52d89fead89117d921568bb87141f9.jpg" alt="" loading="lazy"></p>
<p><strong>步骤二、修改静态库的配置</strong></p>
<p><code>buildSeting -&gt; Build Active Architecture Only</code>设为NO，使编译后的库支持所有架构。</p>
<figure data-type="image" tabindex="1"><img src="http://outiw4np3.bkt.clouddn.com/66345bad9034e95d979b7f8c910d39d9.jpg" alt="" loading="lazy"></figure>
<p><code>buildSeting -&gt; iOS Deployment Target</code>设置静态库支持的iOS版本<br>
<img src="http://outiw4np3.bkt.clouddn.com/0c5ecacd2a60f359b1d69580ff2c80de.jpg" alt="" loading="lazy"></p>
<p><strong>步骤三、新建或拖入需打包的内容</strong></p>
<figure data-type="image" tabindex="2"><img src="http://outiw4np3.bkt.clouddn.com/015550852490ac499d17d8d6ba4ca7de.jpg" alt="" loading="lazy"></figure>
<p><strong>步骤四、设置公开.h文件</strong><br>
<img src="http://outiw4np3.bkt.clouddn.com/6d7cec281fa3f6cf0fa658f75e3e9c6a.jpg" alt="" loading="lazy"></p>
<p><strong>步骤五、选中本Target,<code>Command+B</code>编译（一般编译两次，模拟器的Debug状态和真机的Release状态）。</strong></p>
<figure data-type="image" tabindex="3"><img src="http://outiw4np3.bkt.clouddn.com/0a2bd0f7478a9d3830df90c3875dff54.jpg" alt="" loading="lazy"></figure>
<p><code>Products</code>中的libKPPW变黑表示编译成功，右键<code>Show in Finder</code>打开静态库路径</p>
<p><strong>步骤六、打开终端，输入以下命令合并模拟器和真机的静态库</strong></p>
<pre><code>lipo -create 真机库的路径 模拟器库的路径 -output 合并后新库的路径
</code></pre>
<h2 id="framework文件静态库打包"><code>.framework</code>文件静态库打包</h2>
<p>步骤跟制作 <code>.a</code> 静态库基本一致，但要注意一下几点：</p>
<ol>
<li>
<p>选择 framework</p>
<figure data-type="image" tabindex="4"><img src="http://mmbiz.qpic.cn/mmbiz/foPACGrddJ0HsbypCB0TDBkUaI3CWphvA8ZWV7VVuBS74cicJkI0AXkdTe423iciaxiask4ficqE5p4OnkR30EqQSSA/640" alt="" loading="lazy"></figure>
</li>
<li>
<p>编译时默认制作成动态库，要在下面选择</p>
<figure data-type="image" tabindex="5"><img src="http://mmbiz.qpic.cn/mmbiz/foPACGrddJ0HsbypCB0TDBkUaI3CWphvt8icFAhSH6XwuNquYfOTu6ofAEe1e9dvFJyjEFXphZYYt8vokIuByRw/640" alt="" loading="lazy"></figure>
</li>
<li>
<p>合并静态库的时候，要选择 <code>.framework</code> 文件里的 <code>libstaticclib</code> 文件</p>
<figure data-type="image" tabindex="6"><img src="http://mmbiz.qpic.cn/mmbiz/foPACGrddJ0HsbypCB0TDBkUaI3CWphvI13fTK8hhjSgMXjdHvwTvUk57C0MWPoyicjerjfpJyrmuMPbptNWH2g/640" alt="" loading="lazy"></figure>
</li>
</ol>

            </div>
            
              <div class="tag-container">
                
                  <a href="https://tingke.gitee.io/post/tag/k9LCLRzAU/" class="tag">
                    🍎iOS
                  </a>
                
              </div>
            
            
              <div class="next-post">
                <div class="next">下一篇</div>
                <a href="https://tingke.gitee.io/post/post/bian-xie-gao-zhi-liang-ios-yu-os-x-dai-ma-de-52-ge-you-xiao-fang-fa/">
                  <h3 class="post-title">
                    编写高质量iOS与OS X代码的52个有效方法
                  </h3>
                </a>
              </div>
            

            

          </div>

        </div>
      </div>
    </div>

    <script src="https://unpkg.com/aos@next/dist/aos.js"></script>

<script type="application/javascript">

AOS.init();

hljs.initHighlightingOnLoad()

var app = new Vue({
  el: '#app',
  data: {
    menuVisible: false,
  },
})

</script>




  </body>
</html>
